﻿using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Text;

namespace Acoris.Content
{
    using Acoris.Document;

    /// <summary>
    /// 表示一个内容分区
    /// </summary>
    [DebuggerDisplay("{DocumentText}")]
    public sealed class Section:NamedObject,IDisposable
    {
        internal string m_documentText; //原始的Aml文档内容
        internal AMLDocument m_document;
        internal bool m_loaded;
        internal object m_lock;

        internal Section(string document)
        {
            if (string.IsNullOrEmpty(document)) {
                throw new ArgumentNullException();
            }
            m_documentText = document;
        }

        #region Property

        /// <summary>
        /// 获取当前内容分区的原始文档内容
        /// </summary>
        public string DocumentText {
            get { return m_documentText; }
        }

        /// <summary>
        /// 获取当前内容分区格式无关的文本内容
        /// </summary>
        public string Text {
            get { return string.Empty; }
        }

        public object Synchronize {
            get { return m_lock; }
        }

        public bool Loaded {
            get { return m_loaded; }
        }

        #endregion

        #region IDisposable Support
        private bool disposedValue = false; // 要检测冗余调用

        void Dispose(bool disposing)
        {
            if (!disposedValue) {
                if (disposing) {
                    // TODO: 释放托管状态(托管对象)。
                }

                // TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。
                // TODO: 将大型字段设置为 null。

                disposedValue = true;
            }
        }

        // TODO: 仅当以上 Dispose(bool disposing) 拥有用于释放未托管资源的代码时才替代终结器。
        // ~Section() {
        //   // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。
        //   Dispose(false);
        // }

        // 添加此代码以正确实现可处置模式。
        public void Dispose()
        {
            // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。
            Dispose(true);
            // TODO: 如果在以上内容中替代了终结器，则取消注释以下行。
            // GC.SuppressFinalize(this);
        }
        #endregion

    }
}
